// 权限拦截 导航守卫 路由守卫 router
import router from '@/router' //引入路由实例
import store from '@/store' //引入 vuex 的store 实例
import nprogress from 'nprogress' //引入进度条插件
import 'nprogress/nprogress.css' //引入进度条样式

const whiteList = ['/login', '/404'] //定义白名单 所有不授权限控制的页面

// 路由的前置守卫
router.beforeEach( async(to, from, next) => {
  nprogress.start() //开启进度条
  // 判断有无token
  if (store.getters.token) {
    // 如果有token 继续判断 是不是去登录页面
    if (to.path === '/login') {
      // 表示要去的是登录页面
      next('/') //跳转到主页
    } else {
      // 只有放过的时候 才去 获取用户资料
      // 每次都获取吗？ 如果当前vuex 中有用户的资料的id 表示 已经有了
      // 资料了 不需要获取了 如果没有id 才需要获取
      if (!store.getters.userId) {
        // if 判断 如果没有id 表示当前资料 没有获取过 
       await store.dispatch('user/getUserInfo')
        //getUserInfo 在这里是异步的函数 要改成同步 需要根据用户资料获取数据的话 这里必须改成 同步
      }
      next() //直接放行
    }
  } else {
    // 如果没有token
    if (whiteList.indexOf(to.path) > -1) {
      // 表示要去的地址在白名单
      next() //直接放行
    } else {
      next('/login')
    }
    nprogress.done() //关闭进度条

  }
})
// 路由的后置守卫
router.afterEach(() => {
  nprogress.done() //关闭进度条
 })